home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / term-source.lha / TrapPanel.c < prev    next >
C/C++ Source or Header  |  1995-02-15  |  20KB  |  855 lines

  1. /*
  2. **    TrapPanel.c
  3. **
  4. **    Editing panel for trap list
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_LIST,GAD_SEQUENCE,GAD_COMMAND,
  13.         GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  14.         GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  15.         GAD_LOAD,GAD_SAVE,GAD_USE
  16.     };
  17.  
  18. VOID
  19. TrapPanel()
  20. {
  21.     struct LayoutHandle    *Handle;
  22.     struct GenericList    *TrapList;
  23.     struct TrapNode        *Node,
  24.                 *Next;
  25.  
  26.     ObtainSemaphore(&GenericListTable[GLIST_TRAP] -> ListSemaphore);
  27.  
  28.     TrapList = GenericListTable[GLIST_TRAP];
  29.  
  30.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  31.         LH_LocaleHook,    &LocaleHook,
  32.     TAG_DONE))
  33.     {
  34.         struct Window    *LocalWindow;
  35.         struct IBox     Bounds;
  36.  
  37.         LT_New(Handle,
  38.             LA_Type,    VERTICAL_KIND,
  39.         TAG_DONE);
  40.         {
  41.             LT_New(Handle,
  42.                 LA_Type,    VERTICAL_KIND,
  43.                 LA_LabelID,    MSG_TRAPPANEL_TRAP_CONTROLS_TXT,
  44.             TAG_DONE);
  45.             {
  46.                 LT_New(Handle,
  47.                     LA_Type,    LISTVIEW_KIND,
  48.                     LA_LabelID,    MSG_TRAPPANEL_TRAP_LIST_TXT,
  49.                     LA_LabelPlace,    PLACE_LEFT,
  50.                     LA_Chars,    30,
  51.                     LA_Lines,    10,
  52.                     LA_ID,        GAD_LIST,
  53.                     LALV_CursorKey,    TRUE,
  54.                     LALV_MaxGrowY,    20,
  55.                     LALV_MaxGrowX,    50,
  56.                     LALV_ResizeY,    TRUE,
  57.                     LALV_ResizeX,    TRUE,
  58.                     GTLV_Labels,    TrapList,
  59.  
  60.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  61.                 TAG_DONE);
  62.  
  63.                 LT_New(Handle,
  64.                     LA_Type,    STRING_KIND,
  65.                     LA_LabelID,    MSG_TRAPPANEL_SEQUENCE_TXT,
  66.                     LA_ID,        GAD_SEQUENCE,
  67.                     GTST_MaxChars,    255,
  68.                     GA_Disabled,    TRUE,
  69.                 TAG_DONE);
  70.  
  71.                 LT_New(Handle,
  72.                     LA_Type,    STRING_KIND,
  73.                     LA_LabelID,    MSG_TRAPPANEL_COMMAND_TXT,
  74.                     LA_ID,        GAD_COMMAND,
  75.                     GTST_MaxChars,    255,
  76.                     GA_Disabled,    TRUE,
  77.                 TAG_DONE);
  78.  
  79.                 LT_EndGroup(Handle);
  80.             }
  81.  
  82.             LT_New(Handle,
  83.                 LA_Type,    HORIZONTAL_KIND,
  84.             TAG_DONE);
  85.             {
  86.                 LT_New(Handle,
  87.                     LA_Type,    HORIZONTAL_KIND,
  88.                     LA_LabelID,    MSG_V36_0038,
  89.                     LA_Spread,    TRUE,
  90.                     LA_SameSize,    TRUE,
  91.                 TAG_DONE);
  92.                 {
  93.                     LT_New(Handle,
  94.                         LA_Type,    TAPEDECK_KIND,
  95.                         LATD_ButtonType,TDBT_PREVIOUS,
  96.                         LATD_Smaller,    TRUE,
  97.                         LA_ID,        GAD_TOP,
  98.                         LA_NoKey,    TRUE,
  99.                         GA_Disabled,    TRUE,
  100.                     TAG_DONE);
  101.  
  102.                     LT_New(Handle,
  103.                         LA_Type,    TAPEDECK_KIND,
  104.                         LATD_ButtonType,TDBT_REWIND,
  105.                         LATD_Smaller,    TRUE,
  106.                         LA_ID,        GAD_UP,
  107.                         LA_NoKey,    TRUE,
  108.                         GA_Disabled,    TRUE,
  109.                     TAG_DONE);
  110.  
  111.                     LT_New(Handle,
  112.                         LA_Type,    TAPEDECK_KIND,
  113.                         LATD_ButtonType,TDBT_PLAY,
  114.                         LATD_Smaller,    TRUE,
  115.                         LA_ID,        GAD_DOWN,
  116.                         LA_NoKey,    TRUE,
  117.                         GA_Disabled,    TRUE,
  118.                     TAG_DONE);
  119.  
  120.                     LT_New(Handle,
  121.                         LA_Type,    TAPEDECK_KIND,
  122.                         LATD_ButtonType,TDBT_NEXT,
  123.                         LATD_Smaller,    TRUE,
  124.                         LA_ID,        GAD_END,
  125.                         LA_NoKey,    TRUE,
  126.                         GA_Disabled,    TRUE,
  127.                     TAG_DONE);
  128.  
  129.                     LT_EndGroup(Handle);
  130.                 }
  131.  
  132.                 LT_New(Handle,
  133.                     LA_Type,    HORIZONTAL_KIND,
  134.                     LA_LabelID,    MSG_V36_0043,
  135.                     LA_Spread,    TRUE,
  136.                     LA_SameSize,    TRUE,
  137.                 TAG_DONE);
  138.                 {
  139.                     LT_New(Handle,
  140.                         LA_Type,    BUTTON_KIND,
  141.                         LA_LabelID,    MSG_FASTMACROPANEL_NEW_GAD,
  142.                         LA_ID,        GAD_NEW,
  143.                     TAG_DONE);
  144.  
  145.                     LT_New(Handle,
  146.                         LA_Type,    BUTTON_KIND,
  147.                         LA_LabelID,    MSG_GLOBAL_REMOVE_GAD,
  148.                         LA_ID,        GAD_REMOVE,
  149.                         GA_Disabled,    TRUE,
  150.                     TAG_DONE);
  151.  
  152.                     LT_New(Handle,
  153.                         LA_Type,    BUTTON_KIND,
  154.                         LA_LabelID,    MSG_UPLOADQUEUE_CLEAR_TXT,
  155.                         LA_ID,        GAD_CLEAR,
  156.                         GA_Disabled,    TrapList -> ListHeader . mlh_Head -> mln_Succ == NULL,
  157.                     TAG_DONE);
  158.  
  159.                     LT_EndGroup(Handle);
  160.                 }
  161.  
  162.                 LT_EndGroup(Handle);
  163.             }
  164.  
  165.             LT_New(Handle,
  166.                 LA_Type,    VERTICAL_KIND,
  167.             TAG_DONE);
  168.             {
  169.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  170.  
  171.                 LT_EndGroup(Handle);
  172.             }
  173.  
  174.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  175.                 LAGR_SameSize,    TRUE,
  176.                 LAGR_Spread,    TRUE,
  177.                 LA_ExtraSpace,    TRUE,
  178.             TAG_DONE);
  179.             {
  180.                 LT_New(Handle,
  181.                     LA_Type,    BUTTON_KIND,
  182.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  183.                     LA_ID,        GAD_USE,
  184.                     LABT_ReturnKey,    TRUE,
  185.                     LABT_ExtraFat,    TRUE,
  186.                 TAG_DONE);
  187.  
  188.                 LT_New(Handle,
  189.                     LA_Type,    BUTTON_KIND,
  190.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  191.                     LA_ID,        GAD_LOAD,
  192.                     LABT_ExtraFat,    TRUE,
  193.                 TAG_DONE);
  194.  
  195.                 LT_New(Handle,
  196.                     LA_Type,    BUTTON_KIND,
  197.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  198.                     LA_ID,        GAD_SAVE,
  199.                     LABT_ExtraFat,    TRUE,
  200.                     GA_Disabled,    TrapList -> ListHeader . mlh_Head -> mln_Succ == NULL,
  201.                 TAG_DONE);
  202.  
  203.                 LT_EndGroup(Handle);
  204.             }
  205.  
  206.             LT_EndGroup(Handle);
  207.         }
  208.  
  209.         if(Screen && Window)
  210.         {
  211.             Bounds . Left    = Window -> LeftEdge;
  212.             Bounds . Top    = Window -> TopEdge;
  213.             Bounds . Width    = Window -> Width;
  214.             Bounds . Height    = Window -> Height;
  215.         }
  216.  
  217.         if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_TRAPPANEL_TRAP_PREFERENCES_TXT),Screen ? &Bounds : NULL,0,0,IDCMP_CLOSEWINDOW,0,
  218.             LAWN_HelpHook,        &GuideHook,
  219.             LAWN_Parent,        Window,
  220.             WA_DepthGadget,        TRUE,
  221.             WA_CloseGadget,        TRUE,
  222.             WA_DragBar,        TRUE,
  223.             WA_RMBTrap,        TRUE,
  224.             WA_Activate,        TRUE,
  225.         TAG_DONE))
  226.         {
  227.             struct IntuiMessage    *Message;
  228.             BOOLEAN             Done = FALSE;
  229.             ULONG             MsgClass,
  230.                          MsgQualifier;
  231.             UWORD             MsgCode;
  232.             struct Gadget        *MsgGadget;
  233.  
  234.             struct TrapNode        *Selected = NULL;
  235.             ULONG             Offset = 0;
  236.  
  237.             UBYTE              DummyBuffer[MAX_FILENAME_LENGTH],
  238.                         *DummyChar;
  239.             struct FileRequester    *FileRequest;
  240.  
  241.             GuideContext(CONTEXT_TRAPS);
  242.  
  243.             PushWindow(LocalWindow);
  244.  
  245.             do
  246.             {
  247.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  248.                     break;
  249.  
  250.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  251.                 {
  252.                     MsgClass    = Message -> Class;
  253.                     MsgQualifier    = Message -> Qualifier;
  254.                     MsgCode        = Message -> Code;
  255.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  256.  
  257.                     LT_ReplyIMsg(Message);
  258.  
  259.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  260.                         Done = TRUE;
  261.  
  262.                     if(MsgClass == IDCMP_GADGETUP)
  263.                     {
  264.                         switch(MsgGadget -> GadgetID)
  265.                         {
  266.                             case GAD_USE:
  267.  
  268.                                 Done = TRUE;
  269.                                 break;
  270.  
  271.                             case GAD_TOP:
  272.  
  273.                                 LT_SetAttributes(Handle,GAD_LIST,
  274.                                     GTLV_Labels,    ~0,
  275.                                 TAG_DONE);
  276.  
  277.                                 Remove((struct Node *)Selected);
  278.  
  279.                                 AddHead((struct List *)TrapList,(struct Node *)Selected);
  280.  
  281.                                 Offset = 0;
  282.  
  283.                                 LT_SetAttributes(Handle,GAD_LIST,
  284.                                     GTLV_Labels,    TrapList,
  285.                                     GTLV_Selected,    Offset,
  286.                                     GTLV_Top,    Offset,
  287.                                 TAG_DONE);
  288.  
  289.                                 LT_SetAttributes(Handle,GAD_TOP,
  290.                                     GA_Disabled,    TRUE,
  291.                                 TAG_DONE);
  292.  
  293.                                 LT_SetAttributes(Handle,GAD_UP,
  294.                                     GA_Disabled,    TRUE,
  295.                                 TAG_DONE);
  296.  
  297.                                 LT_SetAttributes(Handle,GAD_DOWN,
  298.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  299.                                 TAG_DONE);
  300.  
  301.                                 LT_SetAttributes(Handle,GAD_END,
  302.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  303.                                 TAG_DONE);
  304.  
  305.                                 TrapsChanged = TRUE;
  306.                                 break;
  307.  
  308.                             case GAD_UP:
  309.  
  310.                                 LT_SetAttributes(Handle,GAD_LIST,
  311.                                     GTLV_Labels,    ~0,
  312.                                 TAG_DONE);
  313.  
  314.                                 Node = (struct TrapNode *)Selected -> Node . ln_Pred -> ln_Pred;
  315.  
  316.                                 Remove((struct Node *)Selected);
  317.  
  318.                                 Insert((struct List *)TrapList,(struct Node *)Selected,(struct Node *)Node);
  319.  
  320.                                 Offset--;
  321.  
  322.                                 LT_SetAttributes(Handle,GAD_LIST,
  323.                                     GTLV_Labels,    TrapList,
  324.                                     GTLV_Selected,    Offset,
  325.                                     GTLV_Top,    Offset,
  326.                                 TAG_DONE);
  327.  
  328.                                 LT_SetAttributes(Handle,GAD_TOP,
  329.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  330.                                 TAG_DONE);
  331.  
  332.                                 LT_SetAttributes(Handle,GAD_UP,
  333.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  334.                                 TAG_DONE);
  335.  
  336.                                 LT_SetAttributes(Handle,GAD_DOWN,
  337.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  338.                                 TAG_DONE);
  339.  
  340.                                 LT_SetAttributes(Handle,GAD_END,
  341.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  342.                                 TAG_DONE);
  343.  
  344.                                 TrapsChanged = TRUE;
  345.  
  346.                                 break;
  347.  
  348.                             case GAD_DOWN:
  349.  
  350.                                 LT_SetAttributes(Handle,GAD_LIST,
  351.                                     GTLV_Labels,    ~0,
  352.                                 TAG_DONE);
  353.  
  354.                                 Node = (struct TrapNode *)Selected -> Node . ln_Succ;
  355.  
  356.                                 Remove((struct Node *)Selected);
  357.  
  358.                                 Insert((struct List *)TrapList,(struct Node *)Selected,(struct Node *)Node);
  359.  
  360.                                 Offset++;
  361.  
  362.                                 LT_SetAttributes(Handle,GAD_LIST,
  363.                                     GTLV_Labels,    TrapList,
  364.                                     GTLV_Selected,    Offset,
  365.                                     GTLV_Top,    Offset,
  366.                                 TAG_DONE);
  367.  
  368.                                 LT_SetAttributes(Handle,GAD_TOP,
  369.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  370.                                 TAG_DONE);
  371.  
  372.                                 LT_SetAttributes(Handle,GAD_UP,
  373.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  374.                                 TAG_DONE);
  375.  
  376.                                 LT_SetAttributes(Handle,GAD_DOWN,
  377.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  378.                                 TAG_DONE);
  379.  
  380.                                 LT_SetAttributes(Handle,GAD_END,
  381.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  382.                                 TAG_DONE);
  383.  
  384.                                 TrapsChanged = TRUE;
  385.  
  386.                                 break;
  387.  
  388.                             case GAD_END:
  389.  
  390.                                 LT_SetAttributes(Handle,GAD_LIST,
  391.                                     GTLV_Labels,    ~0,
  392.                                 TAG_DONE);
  393.  
  394.                                 Remove((struct Node *)Selected);
  395.  
  396.                                 AddTail((struct List *)TrapList,(struct Node *)Selected);
  397.  
  398.                                 Offset = TrapList -> ListCount - 1;
  399.  
  400.                                 LT_SetAttributes(Handle,GAD_LIST,
  401.                                     GTLV_Labels,    TrapList,
  402.                                     GTLV_Selected,    Offset,
  403.                                     GTLV_Top,    Offset,
  404.                                 TAG_DONE);
  405.  
  406.                                 LT_SetAttributes(Handle,GAD_TOP,
  407.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  408.                                 TAG_DONE);
  409.  
  410.                                 LT_SetAttributes(Handle,GAD_UP,
  411.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  412.                                 TAG_DONE);
  413.  
  414.                                 LT_SetAttributes(Handle,GAD_DOWN,
  415.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  416.                                 TAG_DONE);
  417.  
  418.                                 LT_SetAttributes(Handle,GAD_END,
  419.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  420.                                 TAG_DONE);
  421.  
  422.                                 TrapsChanged = TRUE;
  423.  
  424.                                 break;
  425.  
  426.                             case GAD_NEW:
  427.  
  428.                                 if(Node = CreateTrapNode("",""))
  429.                                 {
  430.                                     LT_SetAttributes(Handle,GAD_LIST,
  431.                                         GTLV_Labels,    ~0,
  432.                                     TAG_DONE);
  433.  
  434.                                     AddTail((struct List *)TrapList,(struct Node *)Node);
  435.  
  436.                                     LT_SetAttributes(Handle,GAD_LIST,
  437.                                         GTLV_Labels,    TrapList,
  438.                                         GTLV_Selected,    TrapList -> ListCount++,
  439.                                     TAG_DONE);
  440.  
  441.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  442.                                         GTST_String,    "",
  443.                                         GA_Disabled,    FALSE,
  444.                                     TAG_DONE);
  445.  
  446.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  447.                                         GTST_String,    "",
  448.                                         GA_Disabled,    FALSE,
  449.                                     TAG_DONE);
  450.  
  451.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  452.                                         GA_Disabled,    FALSE,
  453.                                     TAG_DONE);
  454.  
  455.                                     LT_SetAttributes(Handle,GAD_SAVE,
  456.                                         GA_Disabled,    FALSE,
  457.                                     TAG_DONE);
  458.  
  459.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  460.                                         GA_Disabled,    FALSE,
  461.                                     TAG_DONE);
  462.  
  463.                                     Selected = Node;
  464.  
  465.                                     Offset = MsgCode;
  466.  
  467.                                     LT_SetAttributes(Handle,GAD_TOP,
  468.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  469.                                     TAG_DONE);
  470.  
  471.                                     LT_SetAttributes(Handle,GAD_UP,
  472.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  473.                                     TAG_DONE);
  474.  
  475.                                     LT_SetAttributes(Handle,GAD_DOWN,
  476.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  477.                                     TAG_DONE);
  478.  
  479.                                     LT_SetAttributes(Handle,GAD_END,
  480.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  481.                                     TAG_DONE);
  482.  
  483.                                     LT_Activate(Handle,GAD_SEQUENCE);
  484.  
  485.                                     TrapsChanged = TRUE;
  486.                                 }
  487.                                 else
  488.                                     DisplayBeep(LocalWindow -> WScreen);
  489.  
  490.                                 break;
  491.  
  492.                             case GAD_CLEAR:
  493.  
  494.                                 LT_SetAttributes(Handle,GAD_LIST,
  495.                                     GTLV_Labels,    ~0,
  496.                                 TAG_DONE);
  497.  
  498.                                 FreeList((struct List *)TrapList);
  499.  
  500.                                 TrapList -> ListCount = 0;
  501.  
  502.                                 LT_SetAttributes(Handle,GAD_LIST,
  503.                                     GTLV_Labels,    TrapList,
  504.                                     GTLV_Selected,    ~0,
  505.                                 TAG_DONE);
  506.  
  507.                                 Selected = NULL;
  508.  
  509.                                 LT_SetAttributes(Handle,GAD_TOP,
  510.                                     GA_Disabled,    TRUE,
  511.                                 TAG_DONE);
  512.  
  513.                                 LT_SetAttributes(Handle,GAD_UP,
  514.                                     GA_Disabled,    TRUE,
  515.                                 TAG_DONE);
  516.  
  517.                                 LT_SetAttributes(Handle,GAD_DOWN,
  518.                                     GA_Disabled,    TRUE,
  519.                                 TAG_DONE);
  520.  
  521.                                 LT_SetAttributes(Handle,GAD_END,
  522.                                     GA_Disabled,    TRUE,
  523.                                 TAG_DONE);
  524.  
  525.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  526.                                     GA_Disabled,    TRUE,
  527.                                 TAG_DONE);
  528.  
  529.                                 LT_SetAttributes(Handle,GAD_SEQUENCE,
  530.                                     GTST_String,    "",
  531.                                     GA_Disabled,    TRUE,
  532.                                 TAG_DONE);
  533.  
  534.                                 LT_SetAttributes(Handle,GAD_COMMAND,
  535.                                     GTST_String,    "",
  536.                                     GA_Disabled,    TRUE,
  537.                                 TAG_DONE);
  538.  
  539.                                 LT_SetAttributes(Handle,GAD_SAVE,
  540.                                     GA_Disabled,    TRUE,
  541.                                 TAG_DONE);
  542.  
  543.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  544.                                     GA_Disabled,    TRUE,
  545.                                 TAG_DONE);
  546.  
  547.                                 TrapsChanged = FALSE;
  548.  
  549.                                 break;
  550.  
  551.                             case GAD_REMOVE:
  552.  
  553.                                 if(Selected)
  554.                                 {
  555.                                     LT_SetAttributes(Handle,GAD_LIST,
  556.                                         GTLV_Labels,    ~0,
  557.                                     TAG_DONE);
  558.  
  559.                                     if(--TrapList -> ListCount)
  560.                                     {
  561.                                         if(Selected -> Node . ln_Succ -> ln_Succ)
  562.                                             Node = (struct TrapNode *)Selected -> Node . ln_Succ;
  563.                                         else
  564.                                         {
  565.                                             Node = (struct TrapNode *)Selected -> Node . ln_Pred;
  566.  
  567.                                             Offset = 0;
  568.                                         }
  569.                                     }
  570.  
  571.                                     FreeNode((struct Node *)Selected);
  572.  
  573.                                     LT_SetAttributes(Handle,GAD_LIST,
  574.                                         GTLV_Labels,    TrapList,
  575.                                         GTLV_Selected,    Node -> Node . ln_Succ ? GetNodeOffset((struct Node *)Node,(struct List *)TrapList) : ~0,
  576.                                     TAG_DONE);
  577.  
  578.                                     if(!TrapList -> ListCount)
  579.                                     {
  580.                                         Selected = NULL;
  581.  
  582.                                         LT_SetAttributes(Handle,GAD_TOP,
  583.                                             GA_Disabled,    TRUE,
  584.                                         TAG_DONE);
  585.  
  586.                                         LT_SetAttributes(Handle,GAD_UP,
  587.                                             GA_Disabled,    TRUE,
  588.                                         TAG_DONE);
  589.  
  590.                                         LT_SetAttributes(Handle,GAD_DOWN,
  591.                                             GA_Disabled,    TRUE,
  592.                                         TAG_DONE);
  593.  
  594.                                         LT_SetAttributes(Handle,GAD_END,
  595.                                             GA_Disabled,    TRUE,
  596.                                         TAG_DONE);
  597.  
  598.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  599.                                             GA_Disabled,    TRUE,
  600.                                         TAG_DONE);
  601.  
  602.                                         LT_SetAttributes(Handle,GAD_SEQUENCE,
  603.                                             GTST_String,    "",
  604.                                             GA_Disabled,    TRUE,
  605.                                         TAG_DONE);
  606.  
  607.                                         LT_SetAttributes(Handle,GAD_COMMAND,
  608.                                             GTST_String,    "",
  609.                                             GA_Disabled,    TRUE,
  610.                                         TAG_DONE);
  611.  
  612.                                         LT_SetAttributes(Handle,GAD_SAVE,
  613.                                             GA_Disabled,    TRUE,
  614.                                         TAG_DONE);
  615.  
  616.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  617.                                             GA_Disabled,    TRUE,
  618.                                         TAG_DONE);
  619.                                     }
  620.                                     else
  621.                                     {
  622.                                         Selected = Node;
  623.  
  624.                                         LT_SetAttributes(Handle,GAD_COMMAND,
  625.                                             GTST_String,    Selected -> Command,
  626.                                         TAG_DONE);
  627.  
  628.                                         LT_SetAttributes(Handle,GAD_SEQUENCE,
  629.                                             GTST_String,    Selected -> Node . ln_Name,
  630.                                         TAG_DONE);
  631.  
  632.                                         LT_SetAttributes(Handle,GAD_TOP,
  633.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  634.                                         TAG_DONE);
  635.  
  636.                                         LT_SetAttributes(Handle,GAD_UP,
  637.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  638.                                         TAG_DONE);
  639.  
  640.                                         LT_SetAttributes(Handle,GAD_DOWN,
  641.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  642.                                         TAG_DONE);
  643.  
  644.                                         LT_SetAttributes(Handle,GAD_END,
  645.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  646.                                         TAG_DONE);
  647.                                     }
  648.  
  649.                                     TrapsChanged = TRUE;
  650.                                 }
  651.  
  652.                                 break;
  653.  
  654.                             case GAD_LIST:
  655.  
  656.                                 if(Selected = (struct TrapNode *)GetListNode(MsgCode,(struct List *)TrapList))
  657.                                 {
  658.                                     Offset = MsgCode;
  659.  
  660.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  661.                                         GTST_String,    Selected -> Node . ln_Name,
  662.                                         GA_Disabled,    FALSE,
  663.                                     TAG_DONE);
  664.  
  665.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  666.                                         GTST_String,    Selected -> Command,
  667.                                         GA_Disabled,    FALSE,
  668.                                     TAG_DONE);
  669.  
  670.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  671.                                         GA_Disabled,    FALSE,
  672.                                     TAG_DONE);
  673.  
  674.                                     LT_SetAttributes(Handle,GAD_TOP,
  675.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  676.                                     TAG_DONE);
  677.  
  678.                                     LT_SetAttributes(Handle,GAD_UP,
  679.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  680.                                     TAG_DONE);
  681.  
  682.                                     LT_SetAttributes(Handle,GAD_DOWN,
  683.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  684.                                     TAG_DONE);
  685.  
  686.                                     LT_SetAttributes(Handle,GAD_END,
  687.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  688.                                     TAG_DONE);
  689.                                 }
  690.  
  691.                                 break;
  692.  
  693.                             case GAD_SEQUENCE:
  694.  
  695.                                 if(Selected)
  696.                                 {
  697.                                     LT_SetAttributes(Handle,GAD_LIST,
  698.                                         GTLV_Labels,    ~0,
  699.                                     TAG_DONE);
  700.  
  701.                                     Selected = ChangeTrapNode(TrapList,Selected,(STRPTR)LT_GetAttributes(Handle,GAD_SEQUENCE,TAG_DONE),NULL);
  702.  
  703.                                     LT_SetAttributes(Handle,GAD_LIST,
  704.                                         GTLV_Labels,    TrapList,
  705.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,(struct List *)TrapList),
  706.                                     TAG_DONE);
  707.  
  708.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  709.                                         GTST_String,    Selected -> Command,
  710.                                     TAG_DONE);
  711.  
  712.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  713.                                         GTST_String,    Selected -> Node . ln_Name,
  714.                                     TAG_DONE);
  715.  
  716.                                     TrapsChanged = TRUE;
  717.  
  718.                                     LT_Activate(Handle,GAD_COMMAND);
  719.                                 }
  720.  
  721.                                 break;
  722.  
  723.                             case GAD_COMMAND:
  724.  
  725.                                 if(Selected)
  726.                                 {
  727.                                     Selected = ChangeTrapNode(TrapList,Selected,NULL,(STRPTR)LT_GetAttributes(Handle,GAD_COMMAND,TAG_DONE));
  728.  
  729.                                     TrapsChanged = TRUE;
  730.                                 }
  731.  
  732.                                 break;
  733.  
  734.                             case GAD_LOAD:
  735.  
  736.                                 SplitFileName(LastTraps,&DummyChar,DummyBuffer);
  737.  
  738.                                 LT_LockWindow(LocalWindow);
  739.  
  740.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_TRAPPANEL_LOAD_TRAP_SETTINGS_TXT),DummyBuffer,FilePart(LastTraps),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  741.                                 {
  742.                                     LT_SetAttributes(Handle,GAD_LIST,
  743.                                         GTLV_Labels,    ~0,
  744.                                     TAG_DONE);
  745.  
  746.                                     Selected = NULL;
  747.  
  748.                                     if(!LoadTraps(DummyBuffer,TrapList))
  749.                                         ShowError(LocalWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  750.                                     else
  751.                                     {
  752.                                         strcpy(LastTraps,DummyBuffer);
  753.  
  754.                                         TrapsChanged = FALSE;
  755.                                     }
  756.  
  757.                                     LT_SetAttributes(Handle,GAD_LIST,
  758.                                         GTLV_Labels,    TrapList,
  759.                                     TAG_DONE);
  760.  
  761.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  762.                                         GTST_String,    "",
  763.                                         GA_Disabled,    TRUE,
  764.                                     TAG_DONE);
  765.  
  766.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  767.                                         GTST_String,    "",
  768.                                         GA_Disabled,    TRUE,
  769.                                     TAG_DONE);
  770.  
  771.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  772.                                         GA_Disabled,    TRUE,
  773.                                     TAG_DONE);
  774.  
  775.                                     LT_SetAttributes(Handle,GAD_TOP,
  776.                                         GA_Disabled,    TRUE,
  777.                                     TAG_DONE);
  778.  
  779.                                     LT_SetAttributes(Handle,GAD_UP,
  780.                                         GA_Disabled,    TRUE,
  781.                                     TAG_DONE);
  782.  
  783.                                     LT_SetAttributes(Handle,GAD_DOWN,
  784.                                         GA_Disabled,    TRUE,
  785.                                     TAG_DONE);
  786.  
  787.                                     LT_SetAttributes(Handle,GAD_END,
  788.                                         GA_Disabled,    TRUE,
  789.                                     TAG_DONE);
  790.  
  791.                                     LT_SetAttributes(Handle,GAD_SAVE,
  792.                                         GA_Disabled,    !TrapList -> ListCount,
  793.                                     TAG_DONE);
  794.  
  795.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  796.                                         GA_Disabled,    !TrapList -> ListCount,
  797.                                     TAG_DONE);
  798.  
  799.                                     FreeAslRequest(FileRequest);
  800.                                 }
  801.  
  802.                                 LT_UnlockWindow(LocalWindow);
  803.  
  804.                                 break;
  805.  
  806.                             case GAD_SAVE:
  807.  
  808.                                 SplitFileName(LastTraps,&DummyChar,DummyBuffer);
  809.  
  810.                                 LT_LockWindow(LocalWindow);
  811.  
  812.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_TRAPPANEL_SAVE_TRAP_SETTINGS_TXT),DummyBuffer,FilePart(LastTraps),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  813.                                 {
  814.                                     if(!SaveTraps(DummyBuffer,(struct List *)TrapList))
  815.                                         ShowError(LocalWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  816.                                     else
  817.                                     {
  818.                                         strcpy(LastTraps,DummyBuffer);
  819.  
  820.                                         TrapsChanged = FALSE;
  821.                                     }
  822.  
  823.                                     FreeAslRequest(FileRequest);
  824.                                 }
  825.  
  826.                                 LT_UnlockWindow(LocalWindow);
  827.  
  828.                                 break;
  829.                         }
  830.                     }
  831.                 }
  832.             }
  833.             while(!Done);
  834.  
  835.             PopWindow();
  836.         }
  837.  
  838.         LT_DeleteHandle(Handle);
  839.     }
  840.  
  841.     for(Node = (struct TrapNode *)TrapList -> ListHeader . mlh_Head ; Next = (struct TrapNode *)Node -> Node . ln_Succ ; Node = Next)
  842.     {
  843.         if(!Node -> Node . ln_Name[0] || !Node -> SequenceLen)
  844.         {
  845.             Remove(Node);
  846.  
  847.             FreeVecPooled(Node);
  848.  
  849.             TrapList -> ListCount--;
  850.         }
  851.     }
  852.  
  853.     ReleaseSemaphore(&GenericListTable[GLIST_TRAP] -> ListSemaphore);
  854. }
  855.